home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / dev / promether.h < prev    next >
C/C++ Source or Header  |  1990-12-19  |  18KB  |  550 lines

  1.  
  2. /*    @(#)promether.h 1.1 86/09/27 SMI    */
  3.  
  4. /*
  5.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  6.  */
  7.  
  8. #define ETHERMEM    0x080000    /* must be top 16 MB of memory */    
  9. #define BCLEAR(x)    bzero((x), sizeof(*(x)))
  10.  
  11. /*
  12.  * Register definitions for the Sun-2 On-board version of the
  13.  * Intel EDLC based Ethernet interface
  14.  */
  15.  
  16. struct ereg {
  17.     u_char    obie_noreset    : 1;    /* R/W: Ethernet chips reset */
  18.     u_char    obie_noloop    : 1;    /* R/W: loopback */
  19.     u_char    obie_ca        : 1;    /* R/W: channel attention */
  20.     u_char    obie_ie        : 1;    /* R/W: interrupt enable */
  21.     u_char            : 1;    /* R/O: unused */
  22.     u_char    obie_level2    : 1;    /* R/O: 0=Level 1 xcvr, 1=Level 2 */
  23.     u_char    obie_buserr    : 1;    /* R/O: Ether DMA got bus error */
  24.     u_char    obie_intr    : 1;    /* R/O: interrupt request */
  25. };
  26.  
  27. /*
  28.  * Copyright (c) 1984 by Sun Microsystems, Inc.
  29.  */
  30.  
  31. /*
  32.  *    blame kevin sheehan Thu Dec 29 17:46:12 PST 1983
  33.  *    Then blame John Gilmore for leaving it this way!
  34.  *    then blame kevin for the prom version?
  35.  *
  36.  */
  37.  
  38. #define ETHERBUFSIZE        0x2000
  39. #define    MEMPAGESIZE        0x2000    
  40. #define NTXBUF            15
  41. #define NRXBUF            NTXBUF
  42. #define DUMPSCB            1            /* for etherdump */
  43. #define DUMPCB            2
  44. #define DUMPTDR            4
  45. #define DUMPRFD            8
  46. #define DUMPRBD            0x10
  47. #define DUMPSTATS        0x20
  48. #define DUMPTBD            0x40
  49. #define DUMPRXBUF        0x80
  50. #define DUMPALL            -1
  51.  
  52. /*
  53.  * Data types peculiar to the Intel Ethernet chip
  54.  * These types of data MUST be manipulated by calls to to_iexxx
  55.  * and from_iexxx, since their representation changes from the
  56.  * (non-byte-swapped) Multibus board to the (byte-swapped) Model 50 board.
  57.  */
  58. typedef unsigned short mieoff_t;        /* offsets from iscp_base */
  59. typedef unsigned short mieint_t;        /* 16 bit integers */
  60. typedef unsigned long  mieaddr_t;        /* 24-bit addresses */
  61.  
  62. mieoff_t to_mieoff();
  63. mieaddr_t to_mieaddr();
  64. caddr_t from_mieoff();
  65. caddr_t from_mieaddr();
  66.  
  67. mieint_t to_ieint();
  68. #define    from_ieint    (unsigned short) to_ieint
  69.  
  70.  
  71. /*
  72.  * Now for the control structures in shared memory
  73.  */
  74.  
  75. /*
  76.  * System Configuration Pointer
  77.  * This is at 0xFFFFF6 in the EDLC chip's address space.
  78.  */
  79. struct    escp {
  80.     u_short        scp_sysbus;    /* one byte or the other 
  81.                        determines bus width */
  82.     u_long        dummy1;
  83.     mieaddr_t    iscp_addr;    /* bizzare address of iscp */
  84. };
  85.  
  86. /*
  87.  * Intermediate System Configuration Pointer
  88.  * Specifies base of all other control blocks and the offset of the SCB.
  89.  */
  90. struct    eiscp {    
  91. #ifdef NOSWAB
  92.     u_char        dummy2;
  93.     u_char        iscp_busy;    /* 1=> still initializing */
  94. #else  NOSWAB
  95.     u_char        iscp_busy;    /* 1=> still initializing */
  96.     u_char        dummy2;
  97. #endif NOSWAB
  98.     mieoff_t        iscb_offset;    /* offset of scb */
  99.     mieaddr_t    iscb_base;    /* base for all offsets */
  100. };
  101.  
  102.  
  103. /*
  104.  * System Control Block -- the focus of communication with the EDLC
  105.  * Head of command blocks, and holder of all sacred.
  106.  */
  107. struct    escb {
  108. #ifdef NOSWAB
  109.     unsigned    scb_cx:1;    /* cmd with I-bit set has been done */
  110.     unsigned    scb_fr:1;    /* frame received */
  111.     unsigned    scb_cnr:1;    /* command unit became not ready */
  112.     unsigned    scb_rnr:1;    /* receive unit became not ready */
  113.     unsigned    scb_zero0:1;    /* must be zero */
  114.     unsigned    scb_cus:3;    /* command unit status */
  115.  
  116.     unsigned    scb_zero1:1;    /* must be zero */
  117.     unsigned    scb_rus:3;    /* receive unit status */
  118.     unsigned    scb_zero2:4;    /* must be zero */
  119.  
  120.     unsigned    scb_cxack:1;    /* ack cx above */
  121.     unsigned    scb_frack:1;    /* ack frame received */
  122.     unsigned    scb_cnrack:1;    /* ack command unit became not ready */
  123.     unsigned    scb_rnrack:1;    /* ack receive unit became not ready */
  124.     unsigned    scb_zero4:1;    /* must be zero */
  125.     unsigned    scb_cuc:3;    /* command unit command */
  126.  
  127.     unsigned    scb_reset:1;    /* reset chip */
  128.     unsigned    scb_ruc:3;    /* receive unit command */
  129.     unsigned    scb_zero5:4;    /* must be zero */
  130. #else  NOSWAB
  131.     unsigned    scb_zero1:1;    /* must be zero */
  132.     unsigned    scb_rus:3;    /* receive unit status */
  133.     unsigned    scb_zero2:4;    /* must be zero */
  134.  
  135.     unsigned    scb_cx:1;    /* cmd with I-bit set has been done */
  136.     unsigned    scb_fr:1;    /* frame received */
  137.     unsigned    scb_cnr:1;    /* command unit became not ready */
  138.     unsigned    scb_rnr:1;    /* receive unit became not ready */
  139.     unsigned    scb_zero0:1;    /* must be zero */
  140.     unsigned    scb_cus:3;    /* command unit status */
  141.  
  142.     unsigned    scb_reset:1;    /* reset chip */
  143.     unsigned    scb_ruc:3;    /* receive unit command */
  144.     unsigned    scb_zero5:4;    /* must be zero */
  145.  
  146.     unsigned    scb_cxack:1;    /* ack cx above */
  147.     unsigned    scb_frack:1;    /* ack frame received */
  148.     unsigned    scb_cnrack:1;    /* ack command unit became not ready */
  149.     unsigned    scb_rnrack:1;    /* ack receive unit became not ready */
  150.     unsigned    scb_zero4:1;    /* must be zero */
  151.     unsigned    scb_cuc:3;    /* command unit command */
  152. #endif NOSWAB
  153.  
  154.     mieoff_t        scb_cbloff;    /* command block list offset */
  155.     mieoff_t        scb_rfaoff;    /* received frame aread offset */
  156.     mieint_t        scb_crcerrs;    /* # crc errors */
  157.     mieint_t        scb_alnerrs;    /* # mis-aligned frames w/bad CRC */
  158.     mieint_t        scb_rscerrs;    /* # frames tossed due to resources */
  159.     mieint_t        scb_ovrnerrs;    /* # frames tossed due to bus loss */
  160. };
  161.  
  162. /*
  163.  * Generic command block
  164.  */
  165. struct    ecb {            /* standard command block header */
  166. #ifdef NOSWAB
  167.     unsigned    cb_c:1;        /* command done (set 0 by us) */
  168.     unsigned    cb_b:1;        /* busy */
  169.     unsigned    cb_ok:1;    /* command went ok */
  170.     unsigned    cb_abort:1;    /* command was aborted */
  171.     unsigned    cb_stat_hi:4;    /* other status */
  172.     unsigned    cb_stat_lo:8;    /* Part of status */
  173.  
  174.     unsigned    cb_el:1;    /* command is end of list */
  175.     unsigned    cb_s:1;        /* suspend CU when done this command */
  176.     unsigned    cb_i:1;        /* interrupt when done (sets scb_cx) */
  177.     unsigned        :10;
  178.     unsigned    cb_cmd:3;    /* command to be done */
  179. #else  NOSWAB
  180.     unsigned    cb_stat_lo:8;    /* Part of status */
  181.  
  182.     unsigned    cb_c:1;        /* command done (set 0 by us) */
  183.     unsigned    cb_b:1;        /* busy */
  184.     unsigned    cb_ok:1;    /* command went ok */
  185.     unsigned    cb_abort:1;    /* command was aborted */
  186.     unsigned    cb_stat_hi:4;    /* other status */
  187.  
  188.     unsigned         :5;
  189.     unsigned    cb_cmd:3;    /* command to be done */
  190.  
  191.     unsigned    cb_el:1;    /* command is end of list */
  192.     unsigned    cb_s:1;        /* suspend CU when done this command */
  193.     unsigned    cb_i:1;        /* interrupt when done (sets scb_cx) */
  194.     unsigned        :5;
  195. #endif NOSWAB
  196.     mieoff_t        cb_link;    /* offset of next block */
  197. };
  198.  
  199. /*
  200.  * TDR command block extension
  201.  */
  202. struct tdr_ext {    /*  tdr status part of command block */
  203. #ifdef NOSWAB
  204.     unsigned    tdr_linkok:1;    /* was link ok ?? */
  205.     unsigned    tdr_xcvrprob:1;    /* was there a transceiver problem? */
  206.     unsigned    tdr_open:1;    /* was there an open on the net ?? */
  207.     unsigned    tdr_short:1;    /* was there a short on the net ?? */
  208.     unsigned    tdr_dummy:1;    /* NU */
  209.     unsigned    tdr_time_hi:3;    /* time to problem */
  210.     unsigned    tdr_time_lo:8;    /* time to problem */
  211. #else  NOSWAB
  212.     unsigned    tdr_time_lo:8;    /* time to problem */
  213.  
  214.     unsigned    tdr_linkok:1;    /* was link ok ?? */
  215.     unsigned    tdr_xcvrprob:1;    /* was there a transceiver problem? */
  216.     unsigned    tdr_open:1;    /* was there an open on the net ?? */
  217.     unsigned    tdr_short:1;    /* was there a short on the net ?? */
  218.     unsigned    tdr_dummy:1;    /* NU */
  219.     unsigned    tdr_time_hi:3;    /* time to problem */
  220. #endif NOSWAB
  221. };
  222.  
  223. /*
  224.  * Configure command extension.
  225.  */
  226.  
  227. struct conf_ext {
  228. #ifdef NOSWAB
  229.     unsigned    :4;            /* NU */
  230.     unsigned    conf_fifolim:4;        /* fifo limit */
  231.  
  232.     unsigned    :4;            /* NU */
  233.     unsigned    conf_count:4;        /* length in bytes of config params */
  234.  
  235.     unsigned    conf_extloop:1;        /* external loopback */
  236.     unsigned     conf_intloop:1;        /* internal loopback */
  237.     unsigned    conf_preamlen:2;    /* preamble length */
  238.     unsigned    conf_acloc:1;        /* 1 = address and type in buffers */
  239.     unsigned    conf_addrlen:3;        /* length of address */
  240.  
  241.     unsigned    conf_savebad:1;        /* save bad frames */
  242.     unsigned    conf_srdy:1;        /* internal/external sync */
  243.     unsigned        :6;
  244.  
  245.     u_char        conf_framespace;    /* interframe spacing period */
  246.  
  247.     unsigned    conf_backoff:1;        /* backoff method */
  248.     unsigned    conf_exppri:3;        /* exponential priority */
  249.     unsigned        :1;
  250.     unsigned    conf_linpri:3;        /* linear priority */
  251.  
  252.     unsigned    conf_numretries:4;    /* number of retries */
  253.     unsigned        :1;
  254.     unsigned    conf_slottime_hi:3;    /* slot time */
  255.     unsigned    conf_slottime_lo:8;    /* slot time */
  256.  
  257.     unsigned    conf_cdtsrc:1;        /* collision detect source */
  258.     unsigned    conf_cdtf:3;        /* collision detect filter bits */
  259.     unsigned    conf_crssrc:1;        /* carrier sense source */
  260.     unsigned    conf_crsf:3;        /* carrier sense fileter bits */
  261.  
  262.     unsigned    conf_pad:1;        /* do padding ?? */
  263.     unsigned    conf_bitstuff:1;    /* HDLC bitstuffing mode ?? */
  264.     unsigned    conf_crctype:1;        /* crc type */
  265.     unsigned    conf_nocrc:1;        /* crc generation inhibit */
  266.     unsigned    conf_tonocrs:1;        /* xmit on no CRS */
  267.     unsigned    conf_manchester:1;    /* nrz/manch encoding */
  268.     unsigned    conf_nobroadcast:1;    /* reject broadcast frames */
  269.     unsigned    conf_promiscuous:1;    /* mode accepts ALL frames */
  270.  
  271.     unsigned    :8;            /* NU */
  272.  
  273.     u_char        conf_minframelen;    /* minimum frame length */
  274. #else  NOSWAB
  275.     unsigned    :4;            /* NU */
  276.     unsigned    conf_count:4;        /* bytes of config params */
  277.  
  278.     unsigned    :4;            /* NU */
  279.     unsigned    conf_fifolim:4;        /* fifo limit */
  280.  
  281.     unsigned    conf_savebad:1;        /* save bad frames */
  282.     unsigned    conf_srdy:1;        /* internal/external sync */
  283.     unsigned    :6;            /* NU */
  284.  
  285.     unsigned    conf_extloop:1;        /* external loopback */
  286.     unsigned     conf_intloop:1;        /* internal loopback */
  287.     unsigned    conf_preamlen:2;    /* preamble length */
  288.     unsigned    conf_acloc:1;        /* 1 = address&type in bufs */
  289.     unsigned    conf_addrlen:3;        /* length of address */
  290.  
  291.     unsigned    conf_backoff:1;        /* backoff method */
  292.     unsigned    conf_exppri:3;        /* exponential priority */
  293.     unsigned    :1;            /* NU */
  294.     unsigned    conf_linpri:3;        /* linear priority */
  295.  
  296.     u_char        conf_framespace;    /* interframe spacing period */
  297.  
  298.     unsigned    conf_slottime_lo:8;    /* slot time */
  299.  
  300.     unsigned    conf_numretries:4;    /* number of retries */
  301.     unsigned    :1;            /* NU */
  302.     unsigned    conf_slottime_hi:3;    /* slot time */
  303.  
  304.     unsigned    conf_pad:1;        /* do padding ?? */
  305.     unsigned    conf_bitstuff:1;    /* HDLC bitstuffing mode ?? */
  306.     unsigned    conf_crctype:1;        /* crc type */
  307.     unsigned    conf_nocrc:1;        /* crc generation inhibit */
  308.     unsigned    conf_tonocrs:1;        /* xmit on no CRS */
  309.     unsigned    conf_manchester:1;    /* nrz/manch encoding */
  310.     unsigned    conf_nobroadcast:1;    /* reject broadcast frames */
  311.     unsigned    conf_promiscuous:1;    /* mode accepts ALL frames */
  312.  
  313.     unsigned    conf_cdtsrc:1;        /* collision detect source */
  314.     unsigned    conf_cdtf:3;        /* collision det. filter bits */
  315.     unsigned    conf_crssrc:1;        /* carrier sense source */
  316.     unsigned    conf_crsf:3;        /* carrier sense fileter bits */
  317.  
  318.     u_char        conf_minframelen;    /* minimum frame length */
  319.  
  320.     unsigned    :8;            /* NU */
  321. #endif NOSWAB
  322. };
  323.  
  324. #define ADDRLEN        6
  325.  
  326. typedef    char    etheraddr[ADDRLEN];        /* could need swapping */
  327.  
  328. struct tx_ext {                    /* for cb extension block */
  329.     mieoff_t        tx_bdptr;    /* address of TBD */
  330.     etheraddr    tx_addr;    /* destination ethernet address */
  331.     u_short        tx_type;    /* user defined type field */
  332. };
  333.  
  334. /*
  335.  * Transmit control block, again???
  336.  */
  337. struct etxcb {                    /* for linked use */
  338. #ifdef NOSWAB
  339.     unsigned    tx_c:1;        /* command done (set 0 by us) */
  340.     unsigned    tx_b:1;        /* busy */
  341.     unsigned    tx_ok:1;    /* command went ok */
  342.     unsigned    tx_abort:1;    /* command was aborted */
  343.     unsigned    :1;        /* not used */
  344.     unsigned    tx_nocarrier:1;    /* carrier dropped, transmission stopped */
  345.     unsigned    tx_nocts:1;    /* transmission stopped, no clear to send */
  346.     unsigned    tx_underrun:1;    /* dma underrun */
  347.     unsigned    tx_deferred:1;    /* transmission deferred */
  348.     unsigned    tx_heartbeat:1;    /* CDT sensed in interframe period */
  349.     unsigned    tx_bumps:1;    /* too many collisions (counter timed out) */
  350.     unsigned    :1;        /* not used */
  351.     unsigned    tx_numbumps:4;    /* number of collisions in this frame */
  352.     unsigned    tx_el:1;    /* command is end of list */
  353.     unsigned    tx_s:1;        /* suspend CU when done with this command */
  354.     unsigned    tx_i:1;        /* interrupt when done (sets scb_cx) */
  355.     unsigned    tx_dummy:10;    /* NU */
  356.     unsigned    tx_cmd:3;    /* command to be done  will be CMD_TRANSMIT */
  357. #else  NOSWAB
  358.     unsigned    tx_deferred:1;    /* transmission deferred */
  359.     unsigned    tx_heartbeat:1;    /* CDT sensed in interframe period */
  360.     unsigned    tx_bumps:1;    /* too many collisions (counter timed out) */
  361.     unsigned    :1;        /* not used */
  362.     unsigned    tx_numbumps:4;    /* number of collisions in this frame */
  363.  
  364.     unsigned    tx_c:1;        /* command done (set 0 by us) */
  365.     unsigned    tx_b:1;        /* busy */
  366.     unsigned    tx_ok:1;    /* command went ok */
  367.     unsigned    tx_abort:1;    /* command was aborted */
  368.     unsigned    :1;        /* not used */
  369.     unsigned    tx_nocarrier:1;    /* carrier dropped, transmission stopped */
  370.     unsigned    tx_nocts:1;    /* transmission stopped, no clear to send */
  371.     unsigned    tx_underrun:1;    /* dma underrun */
  372.  
  373.     unsigned        :5;    /* NU */
  374.     unsigned    tx_cmd:3;    /* command (== CMD_TRANSMIT) */
  375.  
  376.     unsigned    tx_el:1;    /* command is end of list */
  377.     unsigned    tx_s:1;        /* suspend CU when done with this command */
  378.     unsigned    tx_i:1;        /* interrupt when done (sets scb_cx) */
  379.     unsigned        :5;    /* NU */
  380. #endif NOSWAB
  381.     mieoff_t        tx_link;    /* offset of next block */
  382.     mieoff_t        tx_bdptr;    /* buffer descriptor offset */
  383.     etheraddr    tx_addr;    /* destination ethernet address */
  384.     u_short        tx_type;    /* user defined type field */
  385. };
  386.  
  387. /*
  388.  * Transmit Buffer Descriptor
  389.  */
  390. struct etbd {
  391. #ifdef NOSWAB
  392.     unsigned    tbd_eof:1;    /* end of this frame */
  393.     unsigned    :1;        /* NU */
  394.     unsigned    tbd_count_hi:6;    /* count of bytes in this buffer */
  395.     unsigned    tbd_count_hi:8;    /* count of bytes in this buffer */
  396. #else  NOSWAB
  397.     unsigned    tbd_count_lo:8;    /* count of bytes in this buffer */
  398.     unsigned    tbd_eof:1;    /* end of this frame */
  399.     unsigned    :1;        /* NU */
  400.     unsigned    tbd_count_hi:6;    /* count of bytes in this buffer */
  401. #endif NOSWAB
  402.     mieoff_t        tbd_link;    /* offset of next tbd */
  403.     mieaddr_t    tbd_addr;    /* address of data to be sent */
  404. };
  405.  
  406. /*
  407.  * Receive Frame Descriptor
  408.  */
  409. struct erfd {
  410. #ifdef NOSWAB
  411.     unsigned    rfd_c:1;    /* frame reception complete */
  412.     unsigned    rfd_b:1;    /* this frame busy */
  413.     unsigned    rfd_ok:1;    /* frame received with no errors */
  414.     unsigned    :1;        /* NU */
  415.     unsigned    rfd_crc:1;    /* crc error in aligned frame */
  416.     unsigned    rfd_align:1;    /* CRC error in misaligned frame */
  417.     unsigned    rfd_buffer:1;    /* ran out of buffer space */
  418.     unsigned    rfd_overrun:1;    /* DMA overrun */
  419.  
  420.     unsigned    rfd_short:1;    /* frame too short */
  421.     unsigned    rfd_noeof:1;    /* no EOF (bitstuffing only) */
  422.     unsigned    :6;        /* NU */
  423.  
  424.     unsigned    rfd_el:1;    /* last RFD on RDL */
  425.     unsigned    rfd_s:1;    /* suspend after receiving this frame */
  426.     unsigned        :6;    /* NU */
  427.  
  428.     unsigned        :8;    /* NU */
  429. #else  NOSWAB
  430.     unsigned    rfd_short:1;    /* frame too short */
  431.     unsigned    rfd_noeof:1;    /* no EOF (bitstuffing only) */
  432.     unsigned        :6;
  433.  
  434.     unsigned    rfd_c:1;    /* frame reception complete */
  435.     unsigned    rfd_b:1;    /* this frame busy */
  436.     unsigned    rfd_ok:1;    /* frame received with no errors */
  437.     unsigned        :1;
  438.     unsigned    rfd_crc:1;    /* crc error in aligned frame */
  439.     unsigned    rfd_align:1;    /* CRC error in misaligned frame */
  440.     unsigned    rfd_buffer:1;    /* ran out of buffer space */
  441.     unsigned    rfd_overrun:1;    /* DMA overrun */
  442.  
  443.     unsigned        :8;
  444.  
  445.     unsigned    rfd_el:1;    /* last RFD on RDL */
  446.     unsigned    rfd_s:1;    /* suspend after receiving this frame */
  447.     unsigned        :6;
  448. #endif NOSWAB
  449.     mieoff_t        rfd_link;    /* offset of next RFD */
  450.     mieoff_t        rfd_bdptr;    /* offset of RBD */
  451.     etheraddr    rfd_dest;    /* destination address */
  452.     etheraddr    rfd_source;    /* source address */
  453.     u_short        rfd_type;    /* user defined type field */
  454. };
  455.  
  456. /*
  457.  * Receive Buffer Descriptor
  458.  */
  459. struct erbd {
  460. #ifdef NOSWAB
  461.     unsigned    rbd_eof:1;    /* last buffer of this frame */
  462.     unsigned    rbd_f:1;    /* buffer has been used */
  463.     unsigned    rbd_count_hi:6;    /* count of meaningful bytes */
  464.     unsigned    rbd_count_lo:8;    /* count of meaningful bytes */
  465.     mieoff_t        rbd_bdptr;    /* offset of next rbd */
  466.     mieaddr_t    rbd_addr;    /* address of buffer */
  467.     unsigned    rbd_el:1;    /* buffer is last one in FBL */
  468.     unsigned    :1;        /* NU */
  469.     unsigned    rbd_size_hi:6;    /* size of buffer */
  470.     unsigned    rbd_size_lo:8;    /* size of buffer */
  471. #else  NOSWAB
  472.     unsigned    rbd_count_lo:8;    /* count of meaningful bytes */
  473.  
  474.     unsigned    rbd_eof:1;    /* last buffer of this frame */
  475.     unsigned    rbd_f:1;    /* buffer has been used */
  476.     unsigned    rbd_count_hi:6;    /* count of meaningful bytes */
  477.  
  478.     mieoff_t        rbd_bdptr;    /* offset of next rbd */
  479.     mieaddr_t    rbd_addr;    /* address of buffer */
  480.  
  481.     unsigned    rbd_size_lo:8;    /* size of buffer */
  482.  
  483.     unsigned    rbd_el:1;    /* buffer is last one in FBL */
  484.     unsigned    :1;        /* NU */
  485.     unsigned    rbd_size_hi:6;    /* size of buffer */
  486. #endif NOSWAB
  487. };
  488.  
  489. /*
  490.  *    some handy defines, like commands and status returned.
  491.  */
  492.  
  493. #define    CUS_IDLE    0
  494. #define    CUS_SUSPENDED    1
  495. #define    CUS_READY    2
  496.  
  497. #define RUS_IDLE    0
  498. #define RUS_SUSPENDED    1
  499. #define RUS_NORESOURCES    2
  500. #define RUS_READY    4
  501.  
  502. #define CUC_NOP        0
  503. #define CUC_START    1
  504. #define CUC_RESUME    2
  505. #define    CUC_SUSPEND    3
  506. #define CUC_ABORT    4
  507.  
  508. #define    RUC_NOP        0
  509. #define RUC_START    1
  510. #define    RUC_RESUME    2
  511. #define RUC_SUSPEND    3
  512. #define RUC_ABORT    4
  513.  
  514. #define CMD_NOP        0
  515. #define CMD_IASETUP    1
  516. #define    CMD_CONFIGURE    2
  517. #define CMD_MCSETUP    3
  518. #define CMD_TRANSMIT    4
  519. #define CMD_TDR        5
  520. #define CMD_DUMP    6
  521. #define CMD_DIAGNOSE    7
  522.  
  523. /*
  524.  *    this stuff is the declaration of our use of the ethernet
  525.  *    board.
  526.  */
  527. struct etherblock {
  528.     u_char        ethertype;        /* =50 for Model 50 */
  529.     u_char        verydumfill[3];        /* To long-align dummyfill */
  530.     char dummyfill[MEMPAGESIZE - sizeof(struct escp) - 4*sizeof(u_char)];
  531.     struct escp    scp;            /* system config pointer */
  532.     struct eiscp    iscp;            /* intermediate sys control */
  533.     struct escb    scb;            /* system control block */
  534.     struct cbl {                /* command block list */
  535.         struct ecb    cb;        /* command block */
  536.         union cb_ext {            /* command extensions */
  537.             struct tdr_ext    tdr;    /* time domain reflectometer */
  538.             etheraddr    iaddr;    /* individual address setup */
  539.             struct conf_ext    conf;    /* configuration (see &conf.h)*/
  540.             struct tx_ext    tx;    /* transmit */
  541.         } cb_ext;
  542.     } cbl[NTXBUF+2];
  543.     struct etbd    tbd[NTXBUF];        /* tx buffer descriptor */
  544.     struct erfd    rfd[NRXBUF];        /* rx frame descriptor */
  545.     struct erbd    rbd[NRXBUF+2];        /* rx buffer descriptor */
  546.     u_char        txbuf[NTXBUF][ETHERBUFSIZE];    /* tx buffers */
  547.     u_char        rxbuf[NRXBUF][ETHERBUFSIZE];    /* rx buffers */
  548.     u_char        rxbogus[2][16];        /* for bogus b0-step actions */
  549. };
  550.